import * as user from "./user";
import * as security from "./security";
import * as rbac from "./rbac";
import * as oauth2 from "./oauth2";

export type ChangePassword = {
  /** oldPassword 旧密码 */
  oldPassword: string;
  /** newPassword 新密码 */
  newPassword: string;
};

export type Login = {
  /** username */
  username: string;
  /** password */
  password: string;
  /** 验证码 ID */
  captchaId: string;
  /** 图形验证码 */
  captchaCode: string;
};

export type OAuth2 = {
  access_token: string;
  token_type: string;
  refresh_token: string;
  id_token?: string;
  expires_in: number;
  scope?: string;
};

export type PermissionData = {
  /** id */
  id: string;
  /** 权限名称 */
  name: string;
  /** 权限代码 */
  code: string;
  /** createTime 创建时间 */
  createTime: string;
  /** updateTime 更新时间 */
  updateTime: string;
  /** valid 是否有效 */
  valid: boolean;
};

export type ResetPassword = {
  /** id user id */
  id: string;
  /** 密码 如果不传此字段，将使用用户名作为默认密码 */
  password?: string;
};

export type RoleData = {
  /** id */
  id: string;
  /** 角色名称 */
  name: string;
  /** 角色代码 */
  code: string;
  /** createTime 创建时间 */
  createTime: string;
  /** updateTime 更新时间 */
  updateTime: string;
  /** valid 是否有效 */
  valid: boolean;
};

export type RolePermissionData = {
  /** roleDataList 角色列表 */
  roleDataList: RoleData[];
  /** permissionDataList 权限列表 */
  permissionDataList: PermissionData[];
};

export type UserData = {
  /** ID 用户 ID */
  id: string;
  /** username 用户名 */
  username: string;
  /** nickname 昵称 */
  nickname?: string;
  /** avatar 头像 */
  avatar?: string;
  /** avatarUrl 头像预览地址 */
  avatarUrl?: string;
  /** createTime 创建时间 */
  createTime?: string;
  /** updateTime 更新时间 */
  updateTime?: string;
  /** valid 是否有效 */
  valid?: boolean;
};

export type UserSearch = {
  /** ID 用户 ID */
  id?: string;
  /** username 用户名 */
  username?: string;
  /** nickname 昵称 */
  nickname?: string;
  /** valid 是否有效 */
  valid?: boolean;
};

export type UserSelect = {
  /** ID 用户 ID */
  id: string;
};

export type UserUpsert = {
  /** ID 用户 ID */
  id?: string;
  /** 用户名 仅用于用户标识，不包含任何实际业务信息 */
  username?: string;
  /** valid 是否有效 */
  valid?: boolean;
};

export type UserUpdate = {
  /** nickname 昵称 */
  nickname?: string;
  /** avatar 头像 */
  avatar?: string;
};

export default {
  user,
  security,
  rbac,
  oauth2
};
